<?php
App::import('Model', 'products.ProductCategory');
App::import('Model', 'products.I18nProduct');
class Product extends AppModel {
	var $name = 'Product';
	var $useTable = 'products';
	var $actsAs = array(
		'EditablePage',
		'Sluggable'	=>	array(
			'label'	=>	'title',
			'alias'	=>	'alias'
		),
		'HasSingleImage'	=>	array(
			'image_field'	=>	'image'
		),
		'ExtendedValidation',
		'ExtendedConfiguration'	=> array(
			'configFilename'		=>	'products.config',
			'names'		=> array('Product', 'View', 'Manage', 'Category'),
			'merge'		=>	array(
				array(
					'settings'	=>	array(
						'configFilename'	=>	'editable_pages.config',
						'names'				=>	array('EditablePage', 'View', 'Manage'),
						'overrides'		=>	array(
							'EditablePage'	=>	'Product'
						)
					),
				),
				array(
					'settings'	=>	array(
						'configFilename'	=>	'products.category_configs',
						'names'				=>	array('Category'),
						'reloadConfig'		=> true
					),
				)
			),
			'cacheName'	=>	'manage_products_configs'
		),
		'Containable',
		'Translate'	=>	array('title', 'description', 'content'),
		'ExtendedTranslate'
	);
	
	/**
	 * @var $hasAndBelongsToMany
	 * @brief Biến dùng để ràng buộc dữ liệu đầu vào
	 */
	var $hasAndBelongsToMany = array(
		'Category' => array(
			'className' => 'ProductCategory',
			'joinTable' => 'products_middle',
			'foreignKey' => 'page_id',
			'associationForeignKey' => 'category_id',
			'unique' => true,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'finderQuery' => '',
			'deleteQuery' => '',
			'insertQuery' => ''
		)
	);
	var $validate = array(
		'title'	=>	array(
			'rule-name-1'	=>	array(
				'rule'	=>	'notempty',
				'message'	=>	"Vui lòng nhập tên sản phẩm",
			)
		),
		'content'	=>	array(
			'rule-name-1'	=>	array(
				'rule'	=>	'notempty',
				'message'	=>	"Vui lòng nhập nội dung sản phẩm",
			)
		)
	);
	
	/**
	 * @var $translateModel Translate Model
	 **/
	var $translateModel = 'I18nProduct';
	/**
	 * @var $translateTable Translate table
	 **/
	var $translateTable = 'i18n_products';
	
	/**
	 * Phương thức được sử dụng để xóa hình ảnh khỏi ổ cứng, bao gồm hình chính và thumbnail nếu có
	 * @param $image_name Tên của file hình cần xóa
	 * @param $config Thông tin cấu hình nếu có (Không bắt buộc)
	 * @return Không trả về dữ liệu
	 */
	function delete_image($image_name, $config = array()) {
		if (!count($config)) {
			$config = $this->loadConfig();
		}
		// Xử lý để lấy tên thumbnail
		$ext = strrchr($image_name, ".");
		$pos = strrpos($image_name, ".");
		$filename = substr($image_name,0,$pos);
		$thumbnail_name = $filename."_thumbnail".$ext;
		if (is_file($config[$this->name]['image']['path'].$image_name)) {
			@unlink($config[$this->name]['image']['path'].$image_name);
			@unlink($config[$this->name]['thumbnail']['path'].$thumbnail_name);
		}
	}
}
?>